/**
 * @file exec1.c
 * @author liangwenhao (1943080020@qq.com)
 * @brief 
 * @version 0.1
 * @date 2021-07-27
 * 
 * @copyright Copyright (c) 2021
 * 
 * @authorGitee  https://gitee.com/liangwenhao
 * @authorGithub https://github.com/WHaoL
 * @authorBlogs https://blog.csdn.net/liangwenhao1108
 *  
 * @Code Description: P202-203 测试execle() execlp() 回现所有命令行参数和全部环境表
 *  
 */

#include "apue.h"
#include <sys/wait.h>

char *env_init[] = {
    "USER=unknown",
    "PATH=/home/lwh/ProjsGit/apue/APUE_my/07_Process_Env",
    NULL};

int main(void)
{
    pid_t pid;
    if ((pid = fork()) < 0)
    {
        err_sys("fork error");
    }
    else if (pid == 0) /* specify pathname, specify environment */
    {
        if (execle("/home/lwh/ProjsGit/apue/APUE_my/07_Process_Env/echoall", "echoall", "myarg1", "My Arg2", (char *)0, env_init) < 0)
            err_sys("execle error");

        /* 
            execle需要一个路径名和一个特定的环境, 
            execle不使用系统默认的环境变量，使用传进去的环境变量
        */
    }
    if (waitpid(pid, NULL, 0) != pid)
        err_sys("waitpid error");

    if ((pid = fork()) < 0)
        err_sys("fork error");
    else if (pid == 0) /* specify filename, inherit environment */
        if (execlp("../07_Process_Env/echoall", "echoall", "only 1 arg", (char *)0) < 0)
        // if (execlp("/home/lwh/ProjsGit/apue/APUE_my/07_Process_Env/echoall", "echoall", "only 1 arg", (char *)0) < 0)
            err_sys("execlp error");
    /* 
        execlp需要一个文件名，并将调用者的环境变量传给新程序(相当于使用的是系统默认的环境变量), 
        execlp去系统环境变量的PATH路径中查找 可执行程序
            要是可执行程序 在于PATH路径下，就可以正常执行;
            要是可执行程序 不在PATH路径下，就会报错：找不到可执行程序
            也可以指定相对路径
    */

    exit(0);//此处，父进程并没有等待第二个子进程结束
}